// 配置项
package config

import (
	"os"

	"gopkg.in/ini.v1"
)

// 配置项分为基础配置项和扩展配置项
// 基础配置项仅存储数据库配置，剩余其余配置均为扩展配置项
// 数据库配置项仅允许在配置文件中修改
// 数据库目前仅限主数据库，所以此处不再单独配置
// 扩展配置项存储在后台配置中
// 数据库地址配置格式：（暂仅启用了以下两种数据库）
// MySQL：<用户名>:<密码>@tcp(<地址>:<端口>)/<数据库名>?charset=<数据编码格式>[&parseTime=<true|false>&loc=<时区>&timeout=<连接超时时间>]
// SQLite：<数据库文件位置>

// 基础配置项
type Config struct {
	Listen string `json:"listen" ini:"listen"` // 服务监听地址
	DSN    string `json:"dsn" ini:"dsn"`       // 数据库连接串
}

var config *Config

// 获取基础配置项信息
func GetDefault() *Config {
	if config != nil {
		return config
	}
	config = &Config{}
	// 从配置文件加载配置项
	if _, err := os.Stat("config.conf"); err == nil {
		// 加载ini格式的配置文件
		ini.MapTo(config, "config.conf")
	}
	if _, err := os.Stat(".env"); err == nil {
		// 加载ini格式的配置文件
		ini.MapTo(config, ".env")
	}
	return config
}

// 重新设置配置文件位置
//
//	path	配置文件路径
func (c *Config) SetPath(path string) *Config {
	if _, err := os.Stat(path); err == nil {
		// 加载ini格式的配置文件
		ini.MapTo(config, path)
	}
	return c
}
